package gui_kalenderpanel;
import java.awt.BorderLayout;
import java.awt.Dimension;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import model.*;

public class KalenderPanel extends JPanel{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	//Systemrelatert
	private KalenderKontroll kalenderKontroll;
	private Bruker bruker;
	private UkePanel valgtUkepanel = null;
	
	public final static String SKIFTET_PANEL = "skiftet_panel";
	private PropertyChangeSupport pcs;

	
	
	//Gui-realtert
	private JButton forrigeUke, nesteUke;
	private JComboBox uke, aar, ansatte;
	private ArrayList<UkePanel> ukePlaner; 
	
	private JTabbedPane personTabs;

		
	public KalenderPanel(KalenderKontroll kalenderKontroll, Bruker bruker){
		
		pcs = new PropertyChangeSupport(this);

		
		setLayout(new BorderLayout());

		ukePlaner = new ArrayList<UkePanel>();
		
		this.kalenderKontroll = kalenderKontroll;
		this.bruker = bruker;
		
		
		Calendar kalenderHjelper = Calendar.getInstance();
		int valgtUke = kalenderHjelper.get(Calendar.WEEK_OF_YEAR);
		int valgtAar = kalenderHjelper.get(Calendar.YEAR);
		
		System.out.println("sdfsdfsdf: "+kalenderHjelper.get(Calendar.DAY_OF_WEEK));
		
		//Knapper
		forrigeUke = new JButton("<<");
		nesteUke = new JButton(">>");
		forrigeUke.addActionListener(new ForrigeNesteListener());
		nesteUke.addActionListener(new ForrigeNesteListener());

		
		//Dato-dropdown
		uke = new JComboBox(hentUker());
		aar = new JComboBox(hentAar(2011, 2016));
		aar.setSelectedItem(kalenderHjelper.get(Calendar.YEAR)+"");
		uke.setSelectedIndex(kalenderHjelper.get(Calendar.WEEK_OF_YEAR)-1);
		uke.addActionListener(new DatoListener());
		aar.addActionListener(new DatoListener());
		
		
		ansatte = new JComboBox(finnAlleNavn());
		ansatte.addActionListener(new AnsatteListener());
		
		
		
		
		//Tabber
		ukePlaner.add(new UkePanel(bruker,valgtUke,valgtAar,bruker.getNavn()));
		valgtUkepanel = ukePlaner.get(0);
		
		personTabs = new JTabbedPane();
		
		
		personTabs.addChangeListener(new TabListener());
		
		personTabs.addTab("Jens",ukePlaner.get(0));
		personTabs.setTabComponentAt(0, new TabLabel(bruker.getNavn(),true));
		
		JPanel nord = new JPanel();
		
		
		nord.add(forrigeUke);
		nord.add(uke);
		nord.add(aar);
		nord.add(nesteUke);
		nord.add(ansatte);
		
		add(nord,BorderLayout.NORTH);
		
		
		add(personTabs,BorderLayout.SOUTH);
		
		
	}
	
	public String[] finnAlleNavn(){
		
		String[] arbeidere = kalenderKontroll.hentAlleNavn();
		
		String[] navn = new String[arbeidere.length+1];
		
		navn[0] = "Legg til person";
		
		for(int i =0; i< arbeidere.length;i++){
			
			navn[i+1] = arbeidere[i];
		}
		
		return navn;
	}
	
	public UkePanel getValgtUkepanel() {
		return valgtUkepanel;
	}

	public void addPropertyChangeListener(PropertyChangeListener listener) {
		pcs.addPropertyChangeListener(listener);
	}
	
	private class TabLabel extends JPanel implements ActionListener{

		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;
		
		private JLabel navnLabel;
		private JButton lukk;
		
		
		public TabLabel(String navn, boolean diasbled){
			
			navnLabel = new JLabel(navn);
			lukk = new JButton("X");
			
			if(diasbled){
				
				lukk.setEnabled(!diasbled);
			}
			
			
			lukk.addActionListener(this);
			
			add(navnLabel);
			add(lukk);
		}
		
		
		public void actionPerformed(ActionEvent e) {
			
			int index = personTabs.indexOfTabComponent(this);
			
			kalenderKontroll.fjernPerson(ukePlaner.get(index).getNavn());
			
			personTabs.remove(index);
			ukePlaner.remove(index);
			//TODO: Fjerne brukeren fra ArrayList<Person> personer;
			
			
		}
		
		
		
	}
	
	public String[] hentAar(int fra, int til){
		
		String[] aar = new String[(til-fra)+1]; 
		
		for(int i=0; i<aar.length;i++){
			
			aar[i] = ""+ (fra + i); 
		}
		
		return aar;
	}
	
	public String[] hentUker(){
		
		String[] uker = new String[52];
		
		for(int i=0; i<uker.length;i++){
			
			uker[i] = (i<9)? "Uke  "+(i+1):"Uke "+(i+1);
		}
		
		return uker;
		
	}
	
	public class AnsatteListener implements ActionListener{

		
		
		@Override
		public void actionPerformed(ActionEvent e) {
			
			if(ansatte.getSelectedIndex()!=0){
				
				String navn = ansatte.getSelectedItem().toString();
				
				boolean lagtTil = false;
				
				int i =1;
				
				while(!lagtTil && i <ukePlaner.size()){
					
					if(navn.equals(ukePlaner.get(i).getNavn())){
						
						personTabs.setSelectedIndex(i);
						lagtTil = true;
					}
					
					i++;
				}
				
				if(!lagtTil){
					
					
					UkePanel nyTab = new UkePanel(kalenderKontroll.hentPerson(navn),uke.getSelectedIndex()+1,2012,navn); 
	//				Person nyPerson = new Person(navn);
	//				UkePanel nyTab = new UkePanel(nyPerson,uke.getSelectedIndex()+1,2012,navn);
					
					kalenderKontroll.leggeTilPerson(navn);
					
					ukePlaner.add(nyTab);
					
					personTabs.add(nyTab);
					personTabs.setTabComponentAt(i, new TabLabel(navn,false));
					personTabs.setSelectedIndex(ukePlaner.size()-1);
				}
			}
		
		}
		
	}
	
	public class DatoListener implements ActionListener{


		@Override
		public void actionPerformed(ActionEvent e) {
				
				String txt=  aar.getSelectedItem().toString();
				
				for(int i =0; i<ukePlaner.size();i++){
					
					//ukePlaner.get(i).setValgtUke(uke.getSelectedIndex()+1);
					//ukePlaner.get(i).setValgtAar(Integer.parseInt(aar.getSelectedItem().toString()));
					
					ukePlaner.get(i).setUkeAar(uke.getSelectedIndex()+1, Integer.parseInt(aar.getSelectedItem().toString()));
				}
				
				//System.out.println(uke.getSelectedIndex()+1+ ":" +txt);
		}
		
	}
	
	
	
	public class TabListener implements ChangeListener{

		@Override
		public void stateChanged(ChangeEvent arg0) {
			// TODO Auto-generated method stub
			
			UkePanel temp = valgtUkepanel;
			
			valgtUkepanel = (UkePanel) personTabs.getSelectedComponent();
			
			pcs.firePropertyChange(SKIFTET_PANEL, temp, valgtUkepanel);
		}

		
		
		
	}
	
	public class ForrigeNesteListener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			
			int inkrement = (e.getSource()==forrigeUke)? -1 : 1; 
			
			switch (uke.getSelectedIndex()+ inkrement) {
			case -1:
				aar.setSelectedIndex(aar.getSelectedIndex()-1);
				uke.setSelectedIndex(51);
				break;
			case 52:
				aar.setSelectedIndex(aar.getSelectedIndex()+1);
				uke.setSelectedIndex(0);
				break;	

			default:
				uke.setSelectedIndex(uke.getSelectedIndex()+inkrement);
				break;
			}
			
			
			
		}
		
	}
	
//	public static void main(String[] args){
//		
//		//Avtale(String eier, String beskrivelse, String sted ,int dag, int mnd, int aar,int start, int slutt)
//		
//		KalenderKontroll kk = new KalenderKontroll();
//		Bruker bruker = new Bruker("Jens");
//		//bruker.leggeTilAvtale(new Avtale("Jens", "Hei", "rom 20",20, 2, 2012,12,14));
//		//bruker.leggeTilAvtale(new Avtale("Jens", "Hoppsann", 22, 2, 2012,10,16));
//		//bruker.leggeTilAvtale(new Avtale("Jens", "Hullaballu", 25, 2, 2012,17,19));
//		
//		Calendar dato = Calendar.getInstance();
//		dato.clear(); 
//		
//		dato.set(Calendar.MONTH, 2);
//		dato.set(Calendar.YEAR, 2012);
//		dato.set(Calendar.DAY_OF_MONTH, 27);
//		
//		
//		Avtale avtaleInput = new Avtale("Jens",1,"Test","Rom 12", dato, 10, 12);
//		
//		avtaleInput.leggeTilDeltagere(new Deltager("Beate", Status.godtatt));
//		avtaleInput.leggeTilDeltagere(new Deltager("Per", Status.godtatt));
//		avtaleInput.leggeTilDeltagere(new Deltager("Morten", Status.godtatt));
//		avtaleInput.leggeTilDeltagere(new Deltager("Finn", Status.forkastet));
//		avtaleInput.leggeTilDeltagere(new Deltager("Ola", Status.forkastet));
//		avtaleInput.leggeTilDeltagere(new Deltager("Trude", Status.ikkeSvart));
//		
//		bruker.leggeTilAvtale(avtaleInput);
//		//bruker.leggeTilAvtale(new Avtale("Jens","Notis","Rom 12", 29, 2, 2012, 10, 14));
//		
//		
//		ArrayList<Person>  = new ArrayList<Person>();
//		
//		KalenderPanel kalenderPanel = new KalenderPanel(kk,bruker,personer);
//		
//		JFrame frame = new JFrame("Kalender");
//		frame.getContentPane().add(kalenderPanel);
//		
//		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//		
//		frame.pack();
//		frame.setVisible(true);
//		
//		//bruker.leggeTilAvtale(new Avtale("Jens","Notis","Rom 13", 20, 2, 2012, 10, 11));
//		//Test
//		ArrayList<Avtale> test = bruker.getAvtaler();
//		Avtale avtaletest = bruker.getAvtaler().get(0);
//		bruker.getAvtaler().get(0).getDeltagere().get(0).setStatus(Status.forkastet);
		
//		Deltager deltagertest = avtaletest.getDeltagere().get(0);
//		deltagertest.setStatus(Status.forkastet);
//		System.out.println(deltagertest.getStatus());
//	}
}
